class Solution {
public:
    void duplicateZeros(vector<int>& arr) {
        //先模拟一遍，找到最后一个复写的元素
        int dist=-1;int cur=0;int n=arr.size();
        while(dist<n-1)
        {
            if(arr[cur]==0)
            {
                dist+=2;
            }
            else{ ++dist;}
            ++cur;
        }
        //特殊处理越界的情况
        if(dist==arr.size())
        {
            arr[--dist]=0;
            --dist;--cur;
        }
        cur--;   
            
        //从后往前复写
        while(cur>=0&&dist>0)
        {
            if(arr[cur]) arr[dist--]=arr[cur];
            else
            {
                arr[dist--]=0;
                arr[dist--]=0;
            }
            cur--;
        }
    }
};